using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using Game;
using GameStates;
using Services;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using Game.UI;

/**
 * 测试登录面板控制器 (TestUILoginPanel)
 * 
 * 功能说明：
 * - 用于测试Login状态的UI控制器
 * - 提供登录按钮，模拟登录成功流程
 * - 点击登录按钮后切换到主界面状态
 * 
 * 设计说明：
 * - 继承自MonoBehaviour，作为UI控制器
 * - 使用Unity UI系统处理按钮点击
 * - 通过状态机实现状态切换
 * 
 * 使用场景：
 * - 在Login场景中使用
 * - 模拟真实的登录流程
 * - 测试状态机切换功能
 */
namespace Tests
{
    public class UILoginPanel : Panel
    {
        // 名字输入框
        [SerializeField]
        public TMP_InputField nameInputField;

        // 密码输入框
        [SerializeField]
        public TMP_InputField passwordInputField;
        /**
         * Unity生命周期：Start方法
         * 
         * 功能：
         * - 初始化登录面板
         * - 设置UI组件状态
         * - 准备接收用户输入
         */
        void Start()
        {
            Debug.Log("TestUILoginPanel: 登录面板初始化完成");

            // 默认参数
            nameInputField.text = "test";
            passwordInputField.text = "test";
        }

        /**
         * Unity生命周期：Update方法
         */
        void Update()
        {
        }

        /**
         * 登录按钮点击事件处理
         * 
         * 功能：
         * - 模拟登录成功流程
         * 
         * 调用方式：
         * - 在Unity UI Button组件的OnClick事件中调用
         * - 通过Inspector面板绑定
         * 
         * 实际项目中可以扩展：
         * - 验证用户名密码
         * - 连接服务器验证
         * - 保存登录信息
         * - 处理登录失败
         */
        public void OnClickLogin()
        {
            string name = nameInputField.text;
            string password = passwordInputField.text;

            // 测试LoginService
            // Toast.Show("登录中...");
            ActivityIndicator.Show("Login...");

            // 显示taost
            ServiceManager.GetService<LoginService>().Login(name, password, (result) =>
            {
                if (result.Success)
                {
                    Debug.Log("TestUILoginPanel: 登录成功, 用户名: " + result.PlayerData.Name);
                    Toast.Show("Login Success");

                    // 显示提示对话框
                    AlertDialog.Show("Message", "Login Success", () =>
                    {
                        Debug.Log("TestUILoginPanel: 登录成功, 用户名: " + result.PlayerData.Name);
                        GameApp.Instance.StateMachine.ChangeState(new GameStateMain());
                    });
                }
                else
                {
                    Debug.Log("TestUILoginPanel: 登录失败");
                    Toast.Show("Login Failed");
                }

                ActivityIndicator.Hide();
            });
        }
    }
}
